/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.test.linkdemo;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Properties;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 *
 * @author Xi Rao
 */
public class MulticastPanel {
    private JPanel multicastPanel;
    private JLabel multicastHostLabel;
    private JLabel multicastPortLabel;
    private JTextField multicastHostInputField;
    private JTextField multicastPortInputField;
    private JButton loadServiceButton;
    private JButton createLinkButton;

    private Properties multiCastFacProperty;
    private Properties multiCastLinkProperty;

    private Communicator communicator = LinkCommunicatorGui.getCommunicator();

    public MulticastPanel() {
        multiCastFacProperty = new Properties();
        multiCastLinkProperty = new Properties();

        multicastPanel = new JPanel(new GridBagLayout());

        GridBagConstraints gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.insets = new Insets(2, 2, 2, 2);

        GridBagLayoutAssistant gridBagAssistant = new GridBagLayoutAssistant(gridBagConstraints,
                                                                             multicastPanel);

        multicastHostLabel = new JLabel("Multicast Host");
        gridBagAssistant.add(multicastHostLabel, GridBagConstraints.NONE, 0, 0, 0.0, 1);
        multicastHostInputField = new JTextField(20);
        multicastHostInputField.setEditable(false);
        gridBagAssistant.add(multicastHostInputField, GridBagConstraints.NONE, 1, 0, 0.0, 3);
        multicastPortLabel = new JLabel("Multicast Port");
        gridBagAssistant.add(multicastPortLabel, GridBagConstraints.NONE, 0, 1, 0.0, 1);
        multicastPortInputField = new JTextField(20);
        multicastPortInputField.setEditable(false);
        gridBagAssistant.add(multicastPortInputField, GridBagConstraints.NONE, 1, 1, 0.0, 3);

        loadServiceButton = new JButton("Load Service");
        gridBagAssistant.add(loadServiceButton, GridBagConstraints.SOUTH, 0, 4, 0.0, 2);
        createLinkButton = new JButton("Create link ");
        createLinkButton.setEnabled(false);
        gridBagAssistant.add(createLinkButton, GridBagConstraints.SOUTH, 2, 4, 0.0, 2);

        loadServiceButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                loadServiceAction();
            }
        });

        createLinkButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                createLinkAction();
            }
        });
        createLinkButton.setEnabled(false);
    }

    public JPanel getPanel() {
        return multicastPanel;
    }

    public void loadServiceAction() {

        try {
            communicator.loadCommunicationsOfType(multiCastFacProperty, "multicast");
        } catch(cgl.narada.transport.TransportException transEx) {
            String errorInfo = transEx.toString();
            GuiButtonPanel.getGuiButtonPanel().setResponse(errorInfo);
            return;
        }
        multicastHostInputField.setEditable(true);
        multicastPortInputField.setEditable(true);
        loadServiceButton.setEnabled(false);
        createLinkButton.setEnabled(true);
    }

    public void createLinkAction() {
        multicastHostInputField.setEditable(false);
        multicastPortInputField.setEditable(false);
        loadServiceButton.setEnabled(true);
        createLinkButton.setEnabled(false);
        multiCastLinkProperty.setProperty("MulticastHost",multicastHostInputField.getText());
        multiCastLinkProperty.setProperty("MulticastPort",multicastPortInputField.getText());
        try{
            String linkid = communicator.createLinkTo(multiCastLinkProperty,"multicast");
            GuiTopPanel.getGuiTopPanel().setLinkId(linkid);
        }catch(cgl.narada.transport.TransportException transEx) {
            String errorInfo = transEx.toString();
            GuiButtonPanel.getGuiButtonPanel().setResponse(errorInfo);
            return;
        }
    }
}